#include "audio.h"

#include <QAudioDeviceInfo>
#include <QAudioFormat>
#include <QMessageBox>

Audio::Audio(QObject *parent) : QObject(parent)
{

}

void Audio::startAudio(QString filename)
{
    QAudioDeviceInfo deviceInfo = QAudioDeviceInfo::defaultInputDevice();
    if (deviceInfo.isNull()) { // 录音设备不存在
        QMessageBox::warning(nullptr, "QAudioDeviceInfo", "录音设备不存在");
        return ;
    }
    QAudioFormat format;
    // 设置采样频率
    format.setSampleRate(16000);
    // 设置通道数
    format.setChannelCount(1);
    // 设置位深
    format.setSampleSize(16);
    // 设置编码
    format.setCodec("audio/pcm");
    // 当录音格式不支持时，返回一个最相近的格式
    if (!deviceInfo.isFormatSupported(format)) {
        format = deviceInfo.nearestFormat(format);
    }

    // 打开文件
    m_file = new QFile;
    m_file->setFileName(filename);
    m_file->open(QIODevice::WriteOnly);
    // 创建录音对象
    m_audio = new QAudioInput(format, this);
    m_audio->start(m_file);
}

void Audio::stopAudio()
{
    // 停止录音
    m_audio->stop();
    // 关闭文件
    m_file->close();
    // 释放内存
    delete m_file;
    m_file = nullptr;
}
